package kuonjisai;

public class J14_Array {

	// 배열array
	// 지금까지 우리가 사용한 변수는
	// 하나의 저장공간에 하나의 이름으로
	// 하나의 값만을 저장해었음
	// 만일, 데이터 건수가 여러 개인 경우
	// 변수도 여러 개 선언해서 사용해야 함
	// 학생 1 명의 성적처리 : 변수 7개 사용
	// 학생 10 명의 성적처리 : 변수 7*10 개 사용
	// 이렇게 하면 작성해야 하는 코드도 많아지고
	// 반복문 사용도 힘들어 짐

	// 자바에서는 동일 자료형의 객체나 기본자료형을
	// 묶어서group 배열로 사용할 수 있음

	// 배열에 속하는 각 객체는 "배열의 구성요소"라 함
	// 배열에서 각 구성요소의 갯수를 알아내려면 lenght 필드를 이용
	// 배열에 값을 저장하거나 읽으려면 각 구성요소에
	// 각 구성요소의 index(위치) 를 지정해야 함
	// 배열의 index는 0 부터 시작함
	// 배열은 일단 크기가 정해지면 변경 불가

	public static void main(String[] args) {
		// 배열을 사용하지 않은 성적처리 프로그램
		// 1번학생
		int stdno1 = 123456789; // 학생번호
		int kor1 = 98; // 국어
		int eng1 = 99; // 영어
		int mat1 = 99; // 수학

		// 2번학생
		int stdno2 = 230456789; // 학생번호
		int kor2 = 98; // 국어
		int eng2 = 99; // 영어
		int mat2 = 99; // 수학

		// 3번학생
		int stdno3 = 345678901; // 학생번호
		int kor3 = 98; // 국어
		int eng3 = 99; // 영어
		int mat3 = 99; // 수학

		// 총점
		int tot1 = kor1 + eng1 + mat1;
		int tot2 = kor2 + eng2 + mat2;
		int tot3 = kor3 + eng3 + mat3;

		// 배열을 사용한 성적처리 프로그램
		int[] stdno = new int[3]; // 3명분의 학생번호
		int[] kor = new int[3]; // 3명분의 국어점수
		int[] eng = new int[3]; // 3명분의 영어점수
		int[] mat = new int[3]; // 3명분의 수학점수

		// 배열의 구성요소에 값 저장
		stdno[0] = 123456789;
		stdno[1] = 234567890;
		stdno[2] = 345678901;

		System.out.println(stdno); // I = 인티저형 값, @배열 번지
		System.out.println(stdno[0]);
		System.out.println(stdno[1]);
		System.out.println(stdno[2]);

		kor[0] = 99;
		kor[1] = 30;
		kor[2] = 79;

		eng[0] = 88;
		eng[1] = 88;
		eng[2] = 38;

		mat[0] = 27;
		mat[1] = 87;
		mat[2] = 97;

		System.out.println("국어 배열 좌표 -" + kor);
		System.out.println("1번 국어점수 " + kor[0]);
		System.out.println("2번 국어점수 " + kor[1]);
		System.out.println("3번 국어점수 " + kor[2]);

		System.out.println("영어 배열 좌표 -" + eng);
		System.out.println("1번 영어점수 " + eng[0]);
		System.out.println("2번 영어점수 " + eng[1]);
		System.out.println("3번 영어점수 " + eng[2]);

		System.out.println("수학 배열 좌표 -" + mat);
		System.out.println("1번 수학점수 " + mat[0]);
		System.out.println("2번 수학점수 " + mat[1]);
		System.out.println("3번 수학점수 " + mat[2]);

		// 총점
		int[] tot = new int[3];

		/*
		 * total[0] = kor[0] + eng[0] + mat[0]; total[1] = kor[1] + eng[1] +
		 * mat[1]; total[2] = kor[2] + eng[2] + mat[2];
		 */

		for (int a = 0; a <= 2; ++a) {
			tot[a] = kor[a] + eng[a] + mat[a];
		}

		System.out.println("총점 배열 좌표 -" + tot);
		System.out.println("1번 총점 " + tot[0]);
		System.out.println("2번 총점 " + tot[1]);
		System.out.println("3번 총점 " + tot[2]);

		// 문제 1 : 복권 추첨을 위한 난수 6개 만들어
		// myLotto 라는 배열에 저장하고 모두 출력
		// 로또 6/45에 근거해 1 - 45 범위내 난수 사용

		int[] myLotto = new int[6];
		int s = 0;
		int rem = 1;
		for (int i = 0; i <= 5; ++i) {

			do {
				s = (int) (Math.random() * 100) + 1;

			} while (s > 45);
			myLotto[i] = s;
			System.out.println("두구두구두구~~~ " + (i + 1) + "번째 번호는" + myLotto[i]
					+ " 입니다!");

		}

		// (Math.random() * 45) +1

		// 배열 선언 및 값 초기화
		char[] grade = { '수', '우', '미', '양', '가' };
		// char[] grade = new char[5]
		// grade[0] = '수';
		// grade[1] = '우';
		// grade[2] = '미';
		// grade[3] = '양';
		// grade[4] = '가';
		System.out.println(grade.length);
		for (int i = 0; i < grade.length; ++i) {
			System.out.println(grade[i]);
		}

		// Iterating on Array
		// JDK5 이전에서는 for문과 배열의 index를
		// 이용해서 배열의 값을 출력했음
		// JDK5 이상에서는 for문이 향상되었음
		// 즉, 배열의 index 없이 배열을 반복처리 가능
		// for ( 배열구성요소잘형 : 배열명 )
		for ( char g : grade ) {
			System.out.println(g);
		}

		for ( int ssno : stdno ) {
			System.out.println( ssno );
		}

		for ( int kr : kor ) {
			System.out.println( kr );
		}
		for ( int engk : eng ) {
			System.out.println( engk );
		}
		for ( int math : mat ) {
			System.out.println( math );
		}
		for ( int to : tot ) {
			System.out.println( to );
		}
		for ( int lo : myLotto ) {
			System.out.println( "로또출력" + lo );
		}

	}

}
